#encoding:utf-8

import execjs

class Py4Js(object):
	"""执行js脚本来计算文档的tk值"""
	def __init__(self):
		self.ctx = execjs.compile("""
		function TL(a) { 
		var k = ""; 
		var b = 406644; 
		var b1 = 3293161072; 

		var jd = "."; 
		var $b = "+-a^+6"; 
		var Zb = "+-3^+b+-f"; 

		for (var e = [], f = 0, g = 0; g < a.length; g++) { 
			var m = a.charCodeAt(g); 
			128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), 
			e[f++] = m >> 18 | 240, 
			e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, 
			e[f++] = m >> 6 & 63 | 128), 
			e[f++] = m & 63 | 128) 
		} 
		a = b; 
		for (f = 0; f < e.length; f++) a += e[f], 
		a = RL(a, $b); 
		a = RL(a, Zb); 
		a ^= b1 || 0; 
		0 > a && (a = (a & 2147483647) + 2147483648); 
		a %= 1E6; 
		return a.toString() + jd + (a ^ b) 
		}; 

		function RL(a, b) { 
			var t = "a"; 
			var Yb = "+"; 
			for (var c = 0; c < b.length - 2; c += 3) { 
			var d = b.charAt(c + 2), 
			d = d >= t ? d.charCodeAt(0) - 87 : Number(d), 
			d = b.charAt(c + 1) == Yb ? a >>> d: a << d; 
			a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d 
		} 
		return a 
		}
		""")
	def getTk(self, text):
		"""
		功能：使用类初始化编译的js程序计算文档的tk值
		参数：需计算tk值的文档，text
		"""
		return self.ctx.call("TL", text)

if __name__ == '__main__':
	js = Py4Js()  # 实例化一个执行js程序的类
	text_content = 'hello world!'
	result = js.getTk(text_content)
	print(result)